fn main() {
    println!("Hello, world!");
    //控制权

    //String
    let mut s = String::from("hello");

    s.push_str(", world");


    println!("sss:{}",s);


    //变量数据交互的方式(move)

    //普通数据类型(stack上)
    let x = 5;
    let y = x;

    println!("x的值是:{},y的值是:{}",x,y);

    //heap上的数据

    let s1 = String::from("hello");

    let s2 = s1;

    //报错,因为这种复杂数据类型String,指针(指向存放index和value的heap中),len,cap
    // println!("s1的值是:{};s2的值是{}",s1,s2);

    //clone
    let s3 = String::from("hello");

    let s4 = s3.clone();

    println!("s3的值是:{};s4的值是{}",s3,s4);

    //在rust中,任何标量类型都实现了copy 的trait,这样在复制变量的时候不需要clone

    //比如任何整数类型u32,浮点类型f64,布尔类型,char类型,元组如果内部的所有类型都是可以copy的

    //任何需要分配内存的类型都是不能copy的


}
